package com.zp.self.module.level_4_算法练习.数学.数学推理;

/**
 * @author By ZengPeng
 */
public class 力扣_326_3的幂 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_326_3的幂().isPowerOfThree(9));
        System.out.println(new 力扣_326_3的幂().isPowerOfThree(1));
        System.out.println(new 力扣_326_3的幂().isPowerOfThree(27));
        System.out.println(new 力扣_326_3的幂().isPowerOfThree(0));
        System.out.println(new 力扣_326_3的幂().isPowerOfThree(45));
    }

    /**
     * 题目：给定一个整数，写一个函数来判断它是否是 3 的幂次方。如果是，返回 true ；否则，返回 false 。
     * 整数 n 是 3 的幂次方需满足：存在整数 x 使得 n == 3x
     * 示例 1：
     * 输入：n = 27
     * 输出：true
     *
     * 分析：
     *      1. n>=3,每次取余数，不为0 返回false
     *      大神：3的幂次的质因子只有3，而所给出的n如果也是3的幂次，
     *            故而题目中所给整数范围内最大的3的幂次的因子只能是3的幂次，1162261467是3的19次幂
     * 边界值 & 注意点：
     *      1.
     **/
    public boolean isPowerOfThree(int n) {
        while (n>=3){
            if(n%3!=0) return false;
            n=n/3;
        }
        return  n==1;
    }
}
